異なるアカウント間で同名Bucketを1時間程掛けて移行させた記録
はじめに
長くファイルを管理していたS3 Bucketのアカウント間移行という作業を実施しました。課題になったのは以下の3項目です。
- Bucketを直接アカウント間で移動させる手段はない
- 同名のBucketは存在できない
消して作り直す他ないということです。そして一度削除すると再作成まで1時間ほどかかる場合があること。再作成可能になった後の操作を管理コンソール上で行う際に、セッション切れや読み込み待ち等で第三者に作られてしまわないかやや不安になるところです。
滅多に行うことではありませんが、実際の作業についてどんな感じになるのか記録として残してみました。
Bucketを削除する
普通に削除するだけです。
aws s3 rb s3://bucket-name --force
Bucketが作成可能になるまで待つ
問題はここからです。作成直後のBucketであれば再作成可能になるまで待つ必要はないようです。
作成可能になったことを直接知る術はありません。ひたすらaws s3 mb
を実行して成功するのを待つくらいです。
% aws s3 mb s://bucket-name/ make_bucket failed: s3://bucket-name/ An error occurred (OperationAborted) when calling the CreateBucket operation: A conflicting conditional operation is currently in progress against this resource. Please try again.
作成できない場合はこのエラーメッセージになります。バックアップの削除が完了するまでは恐らくこの状態になるのだと思われます。大体30分〜1時間程度掛かるようですが、これはBucket内に入っているオブジェクトがたったの1個でも変わりません。
1時間くらいのタイマーを使うなどして放置しておくのが一番かもしれませんが、万が一早まった時を考えると、数分おきに1回トライするバッチを実行するのも一つの手です。
while true; do aws s3 mb s3://bucket-name/; sleep 300s; done
aws s3 ls
で確認するのも手ですが、管理コンソール上での表示と異なることもあったりと、実際に作成してみないと不明なためおすすめしません。
再作成出来た場合
無事再作成が可能になった場合、コマンドを実行してもエラーにはなりません。
% aws s3 mb s://bucket-name/ make_bucket: bucket-name
とりあえず一安心ですね。
あとがき
今回はファイル参照用に設置したBucketが対象で、事前に一時削除することを周知していたこともあってか現時点で目立ったトラブルも発生していません。
一番大事なことは該当Bucketが存在しないことによるトラブルが発生しないかどうか、です。Bucket名が異なってもさほどコストが発生しないのであれば、異なる名前のBucketを作った上でsyncし、システムで参照するBucket名をスイッチするほうが安全だと思われます。